package cn.csc.module.product.service.shopcart;

import cn.csc.framework.common.pojo.PageResult;
import cn.csc.module.product.controller.admin.shopcart.vo.SopCartItemCreateReqVO;
import cn.csc.module.product.controller.admin.shopcart.vo.SopCartItemExportReqVO;
import cn.csc.module.product.controller.admin.shopcart.vo.SopCartItemPageReqVO;
import cn.csc.module.product.controller.admin.shopcart.vo.SopCartItemUpdateReqVO;
import cn.csc.module.product.convert.shopcart.SopCartItemConvert;
import cn.csc.module.product.dal.dataobject.shopcart.SopCartItemDO;
import cn.csc.module.product.dal.mysql.shopcart.SopCartItemMapper;
import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;

import javax.annotation.Resource;
import java.math.BigInteger;
import java.util.Collection;
import java.util.List;

import static cn.csc.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.csc.module.product.enums.ErrorCodeConstants.SOP_CART_ITEM_NOT_EXISTS;

/**
 * 购物车 Service 实现类
 *
 * @author liuchuang
 */
@Service
@Validated
public class SopCartItemServiceImpl implements SopCartItemService {

    @Resource
    private SopCartItemMapper sopCartItemMapper;

    @Override
    public BigInteger createSopCartItem(SopCartItemCreateReqVO createReqVO) {
        // 插入
        SopCartItemDO sopCartItem = SopCartItemConvert.INSTANCE.convert(createReqVO);
        sopCartItemMapper.insert(sopCartItem);
        // 返回
        return sopCartItem.getId();
    }

    @Override
    public void updateSopCartItem(SopCartItemUpdateReqVO updateReqVO) {
        // 校验存在
        validateSopCartItemExists(updateReqVO.getId());
        // 更新
        SopCartItemDO updateObj = SopCartItemConvert.INSTANCE.convert(updateReqVO);
        sopCartItemMapper.updateById(updateObj);
    }

    @Override
    public void deleteSopCartItem(BigInteger id) {
        // 校验存在
        validateSopCartItemExists(id);
        // 删除
        sopCartItemMapper.deleteById(id);
    }

    private void validateSopCartItemExists(BigInteger id) {
        if (sopCartItemMapper.selectById(id) == null) {
            throw exception(SOP_CART_ITEM_NOT_EXISTS);
        }
    }

    @Override
    public SopCartItemDO getSopCartItem(BigInteger id) {
        return sopCartItemMapper.selectById(id);
    }

    @Override
    public List<SopCartItemDO> getSopCartItemList(Collection<BigInteger> ids) {
        return sopCartItemMapper.selectBatchIds(ids);
    }

    @Override
    public PageResult<SopCartItemDO> getSopCartItemPage(SopCartItemPageReqVO pageReqVO) {
        return sopCartItemMapper.selectPage(pageReqVO);
    }

    @Override
    public List<SopCartItemDO> getSopCartItemList(SopCartItemExportReqVO exportReqVO) {
        return sopCartItemMapper.selectList(exportReqVO);
    }

}
